/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.reporte.accion;

import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.persistence.EntityManager;
import org.reporte.control.AbstractFacade;
import org.reporte.control.Conexion;
import org.reporte.modelo.UsuarioModuloReporte;
import org.reporte.utils.EncriptadorSHA;
import org.reporte.utils.JsfAyuda;

/**
 *
 * @author 43579648
 */
@ManagedBean
@ViewScoped
public class UsuarioManejador extends AbstractFacade<UsuarioModuloReporte> {

    //@PersistenceContext(type= PersistenceContextType.TRANSACTION,unitName="ModuloReportesPU")
    //private EntityManager em;
    private List<UsuarioModuloReporte> listaDatos;
    private boolean datosIngresados;
    private String comprobacionContrasena;
    private boolean nuevoEntidad;
    private boolean cambiarContrasena;
    
    
    /** Creates a new instance of UsuarioManejador */
    public UsuarioManejador() {
        super(UsuarioModuloReporte.class);
    }

    @Override
    protected EntityManager getEntityManager() {
        return Conexion.getEntityManager();
    }
  
    public void guardarEntidad(){
        try{
            //Validaciones de contraseÃ±a
            if(isCambiarContrasena()){
                if(!comprobarContrasena()){
                     JsfAyuda.lanzarMensajeAdvertencia("La contraseña no coincide");
                     return; //Salir del metodo guardar porque no coinciden las contraseÃ±as
                }else{
                    //Encriptando la contraseÃ±a
                    this.getEntity().setContrasena(EncriptadorSHA.encriptarBase64(this.getEntity().getContrasena()));
                }
            }
            
            //Guardando el usuario
            if(isNuevoEntidad()){
                this.create();
            }else{
                this.edit(); 
            }
            this.setNuevoEntidad(false);
            this.setCambiarContrasena(false);
            JsfAyuda.lanzarMensajeInfo(this.getEntity().getClass().getSimpleName() + " guardado exitosamente");
        }catch(Exception e){
            JsfAyuda.lanzarMensajeError("Error al guardar entidad " +  " - " + e.getCause().getMessage());
        }
    }
    
    public void eliminarEntidad(){
        try{
            this.remove();
            JsfAyuda.lanzarMensajeInfo(this.getEntity().getClass().getSimpleName() + " eliminado exitosamente");
        }catch(Exception e){
            JsfAyuda.lanzarMensajeError("Error al eliminar entidad " + " - " + e.getMessage());
        }
    }
    
    public boolean comprobarContrasena(){
        if(this.comprobacionContrasena.equals(this.getEntity().getContrasena())){
            return true;
        }else{
            return false;
        }
    }
    
    public void accionCambioContrasena(){
            setCambiarContrasena(!cambiarContrasena);
    }
   
   
    public void cerrarDialogoUsuario(){
        this.setNuevoEntidad(false);
        this.setCambiarContrasena(false);
    }
        
    public void instanciaNuevaEntidad(){
        this.setEntity(new UsuarioModuloReporte());
        this.setNuevoEntidad(true);
        setCambiarContrasena(true);
    }

    public List<UsuarioModuloReporte> getListaDatos() {
        if(!datosIngresados){
            listaDatos = this.findAll();
        }
        return listaDatos;
    }

    public void setListaDatos(List<UsuarioModuloReporte> listaDatos) {
        this.listaDatos = listaDatos;
    }
    
  
    
    public void setDatosIngresados(boolean datosIngresados) {
        this.datosIngresados = datosIngresados;
    }
    
    public Integer contadorlistaDatos(){
        return listaDatos==null?0:listaDatos.size();
    }
    

    public String getComprobacionContrasena() {
        return comprobacionContrasena;
    }

    public void setComprobacionContrasena(String comprobacionContrasena) {
        this.comprobacionContrasena = comprobacionContrasena;
    }

    public boolean isNuevoEntidad() {
        return nuevoEntidad;
    }

    public void setNuevoEntidad(boolean nuevoEntidad) {
        this.nuevoEntidad = nuevoEntidad;
    }

    public boolean isCambiarContrasena() {
        return cambiarContrasena;
    }

    public void setCambiarContrasena(boolean cambiarContrasena) {
        this.cambiarContrasena = cambiarContrasena;
    }
    
    
    
}
